//
//  AVGUserAccountViewModel.swift
//  33-
//
//  Created by mac on 16/7/24.
//  Copyright © 2016年 mac. All rights reserved.
//

import UIKit
/// 负责处理 HMUserAccount的业务逻辑
/// 网络请求
/// 字典转模型
/// 保存模型到沙盒中
/// 沙盒加载模型到内存中
class AVGUserAccountViewModel: NSObject {

    /// 单例
    static let sharedUserAccountViewModel: AVGUserAccountViewModel = AVGUserAccountViewModel()
    
    /// userAccount,以后要访问账号只需要访问这个属性
    var userAccount: AVGUserAount?
    
    /// 账号保存的路径
    let userAccountFile = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last!.stringByAppendingString("/userAccount.plist")
    
    override init() {
        // 读取沙盒中的账号
        super.init()
        
        userAccount = loadAccount()
    }
    
    /**
     去服务器请求AccessToken
     
     - parameter code: code
     */
    func loadAccessToken(code: String,completion: (error: NSError?) -> Void) {
        let urlString = "https://api.weibo.com/oauth2/access_token"
        
        // 参数
        let parameters = [
            "client_id": client_id,
            "client_secret": client_secret,
            "grant_type": "authorization_code",
            "code": code,
            "redirect_uri": redirect_uri
        ]
        
        // 使用AFN发送POST请求
        AVGNetworkTool.shareNetworkTool.POST(urlString, parameters: parameters, progress: nil, success: { (_, resopnseOjbect) -> Void in
            //            print("resopnseOjbect: \(resopnseOjbect)")
            
            // 字典转模型
            let dict = resopnseOjbect as! [String: AnyObject]
            self.userAccount = AVGUserAount(dict: dict)
            
            print("userAccount = \(self.userAccount)")
            
            // 保存到沙盒中
            NSKeyedArchiver.archiveRootObject(self.userAccount!, toFile: self.userAccountFile)
            
            // 读取沙盒中的模型
            completion(error: nil)
            }) { (_, error) -> Void in
                completion(error: error)
        }
    }
    
    /// 加载沙盒中的账号
    private func loadAccount() -> AVGUserAount? {
        let account = NSKeyedUnarchiver.unarchiveObjectWithFile(userAccountFile) as? AVGUserAount
        
        // 如果有账号需要判断是否过期
        // NSDate(): 当前时间
        // account?.expiresDate 2021
        // NSDate(): 2016
        // 2021 > 2016
        // 测试过期时间
        //        account?.expiresDate = NSDate(timeIntervalSinceNow: -100)
        if account != nil && account?.expiresDate?.compare(NSDate()) == NSComparisonResult.OrderedDescending {
            print("没有过期的账号")
            return account
        }
        
        return nil
    }
}
